import java.util.HashMap;
import java.util.Map;

// 找出一个最长的子数组，子数组中不超过两种类型的水果
// 用哈希表就可以很方便地维护水果的种类
class Solution {
    public int totalFruit(int[] fruits) {
        Map<Integer, Integer> hash = new HashMap<>();
        int ret = 0;

        for (int left = 0, right = 0; right < fruits.length; right++) {
            int in = fruits[right]; // 进窗口
            hash.put(in, hash.getOrDefault(in, 0) + 1); // 种类加一
            while (hash.size() > 2) { // 判断
                int out = fruits[left];
                hash.put(out, hash.get(out)-1); // 出窗口
                if (hash.get(out) == 0) hash.remove(out); // 种类减一
                left++;
            }
            ret = Math.max(ret, right - left + 1); // 更新结果
        }
        return ret;
    }
}